/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.cmti.skeleton.service;

import com.cmti.commons.entity.AuthenticationInfo;
import com.cmti.skeleton.dto.SysRoleDto;
import com.cmti.skeleton.dto.SysUserDto;
import com.cmti.skeleton.entity.SysUser;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Danny Lee
 */
public interface UserService {

    /**
     * 验证用户身份
     *
     * @param account
     * @param password
     * @return 验证成功返回AuthenticationInfo实体<br> 验证失败返回null
     */
    AuthenticationInfo authenticate(String account, String password);

    /**
     * 生成用户的权限及导航菜单List
     *
     * @param authInfo
     * @return Map，里面包含三个List：<ul>
     * <li>权限List（AuthenticationInfo里面用）；key：rightsList</li>
     * <li>分级权限树List（权限配置里面用）；key：rightsTree</li>
     * <li>导航菜单树List；key：navMenuTree</li> </ul>
     */
    Map<String, List> generateRightsAndMenu(AuthenticationInfo authInfo);

    /**
     * 列表显示所有的用户
     *
     * @param sysUserDto
     * @return 成功返回list,失败返回空集合
     */
    public List<SysUserDto> getUserList(SysUserDto sysUserDto);

    /**
     * 计算部门的总数
     *
     * @Param sysUserDto
     * @return totalUser 成功返回总数，失败返回0
     */
//    public long totalUser(SysUserDto sysUserDto);
    /**
     * 根据id 获取用户信息
     *
     * @param userId
     *
     * @return 成功返回SysUser，失败返回空实体
     */
    public SysUser getSysUserById(long userId);

    /**
     * 添加用户及角色信息
     *
     * @param userDto
     * @return the boolean
     */
    public boolean addUser(SysUserDto userDto);

    /**
     * 修改用户 及 角色信息
     *
     * @param user
     * @return the boolean
     */
    public boolean modifyUser(SysUserDto user);

    /**
     * 验证用户帐号是否重复
     *
     * @param account
     * @return 如果存在则返回1，否则返回0
     */
    public long getValidCount(String account);

    /**
     * 重置密码
     *
     * @param userId
     * @param newPwd
     */
    public void resetPassword(long userId, String newPwd);

    /**
     * 删除用户
     *
     * @param uid
     * @return 成功返回true,失败返回false
     */
    public boolean delUser(long uid);

    /**
     * 激活/冻结用户
     *
     * @param uid
     * @param action
     */
    void lockOrUnlock(long uid, String action);

    /**
     * 根据用户Id获取角色ID
     *
     * @param uid
     * @return
     */
    List<Long> getRoleIdByUserId(Long uid);
}
